package com.wjm.collections;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

/**
 * Data:2022年07月07日
 * Author:wjm
 * Content: Comparator(外部比较强)
 *
 *
 *  Comparator称之为外部比较器，因为Comparator没有和当前自定义的类有耦合关系，
 *  只是在集合排序的时候提供了比较规则，比较灵活。而内部比较器是和类有强耦合关系的，
 *  所以推荐使用外部比较器
 *
 *        compare方法的返回值是int类型，比较结果只看正负和是否为0，与值的大小无关
 *          返回的值 > 0 ,正序    (当前对象-比较对象之后的值 > 0 ,正序)
 *          返回的值 =0 , 相同    (当前对象-比较对象之后的值 =0 , 相同)
 *          返回的值 < 0 ,倒序    (当前对象-比较对象之后的值 < 0 ,倒序)
 *
 *
 */
public class ComparatorDemo {
    public static void main(String[] args) {
        //创建集合
        List<Teacher> list = new ArrayList<>();
        //添加元素
        Collections.addAll(list,new Teacher("翁健敏",20));
        Collections.addAll(list,new Teacher("陈婉婷",20));
        Collections.addAll(list,new Teacher("欧文",30));
        Collections.addAll(list,new Teacher("詹姆斯",36));
        Collections.addAll(list,new Teacher("库里",32));
        System.out.println(list);

        //Comparator自定义排序规则,使用匿名内部类的方式
        Collections.sort(list, new Comparator<Teacher>() {
            @Override
            public int compare(Teacher o1, Teacher o2) {
                //自定义排序规则,按年龄排序
                int result = o1.age - o2.age;
                //如果年龄相等则按照名字的第一个字排序
                if (result == 0){
                    //获取第一个字相减
                    result = o1.name.charAt(0) - o2.name.charAt(0);
                    return result;
                }
                return result;
            }
        });
        System.out.println(list);
    }
}

//创建一个类
class Teacher{
    String name;
    int age;

    public Teacher(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "Teacher{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}